#!/bin/bash

# 自动Git提交脚本
# 作者: Lnuyasha
# 功能: 每小时检查/home/Test目录的Git变更并自动提交

# 设置工作目录
WORK_DIR="/home/Test"
LOG_FILE="/home/Test/log/auto_commit.log"

# Git认证信息
GIT_USERNAME="Lnuyasha"
# 重要：Gitee需要使用个人访问令牌而不是登录密码
# 请按照以下步骤配置：
# 1. 访问 https://gitee.com → 设置 → 安全设置 → 私人令牌
# 2. 生成新令牌，选择 projects 权限
# 3. 将生成的32位令牌替换下面的密码
# 示例令牌格式：1234567890abcdef1234567890abcdef
GIT_PASSWORD="a6b668c66e8a247041eaa96612fac0eb"  # 请替换为Gitee个人访问令牌
GIT_REPO_URL="https://${GIT_USERNAME}:${GIT_PASSWORD}@gitee.com/Lnuyasha/Test.git"

# 记录日志函数
log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

# 进入工作目录
cd "$WORK_DIR" || {
    log_message "错误: 无法进入目录 $WORK_DIR"
    exit 1
}

# 检查是否是Git仓库
if [ ! -d ".git" ]; then
    log_message "错误: $WORK_DIR 不是Git仓库"
    exit 1
fi

# 配置Git凭据以实现自动认证
git config credential.helper store
echo "https://${GIT_USERNAME}:${GIT_PASSWORD}@gitee.com" > ~/.git-credentials
chmod 600 ~/.git-credentials

# 确保远程仓库URL包含认证信息
git remote set-url origin "$GIT_REPO_URL"

# 检查Git状态
git_status=$(git status --porcelain)

if [ -z "$git_status" ]; then
    log_message "信息: 没有检测到文件变更"
    exit 0
fi

log_message "信息: 检测到文件变更，开始自动提交..."

# 添加所有变更的文件
git add . 2>&1 | while read line; do
    log_message "Git Add: $line"
done

# 检查是否有文件被添加到暂存区
staged_files=$(git diff --cached --name-only)
if [ -z "$staged_files" ]; then
    log_message "警告: 没有文件被添加到暂存区"
    exit 0
fi

# 生成提交信息
commit_message="自动提交 - $(date '+%Y-%m-%d %H:%M:%S')"

# 提交变更
if git commit -m "$commit_message" 2>&1 | while read line; do
    log_message "Git Commit: $line"
done; then
    log_message "成功: 提交完成 - $commit_message"
    
    # 推送到远程仓库
    log_message "信息: 开始推送到远程仓库..."
    
    # 尝试推送，如果失败则记录详细错误信息
    push_output=$(git push origin master 2>&1)
    push_exit_code=$?
    
    echo "$push_output" | while read line; do
        log_message "Git Push: $line"
    done
    
    if [ $push_exit_code -eq 0 ]; then
        log_message "成功: 推送到远程仓库完成"
    else
        log_message "错误: 推送到远程仓库失败 (退出码: $push_exit_code)"
        if echo "$push_output" | grep -q "access token"; then
            log_message "========== 认证错误解决方案 =========="
            log_message "错误原因: Gitee需要使用个人访问令牌而不是登录密码"
            log_message "解决步骤:"
            log_message "1. 访问 https://gitee.com → 设置 → 安全设置 → 私人令牌"
            log_message "2. 生成新令牌，选择 projects 权限"
            log_message "3. 编辑 auto_commit.sh，将 GIT_PASSWORD 替换为生成的令牌"
            log_message "4. 详细说明请查看: gitee_token_setup.md"
            log_message "====================================="
        fi
    fi
else
    log_message "错误: 提交失败"
    exit 1
fi

log_message "信息: 自动提交流程完成"